home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / perl / os2perl / arg.h < prev    next >
C/C++ Source or Header  |  1991-06-11  |  20KB  |  978 lines

  1. /* $RCSfile: arg.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 10:18:30 $
  2.  *
  3.  *    Copyright (c) 1991, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  * $Log:    arg.h,v $
  9.  * Revision 4.0.1.1  91/06/07  10:18:30  lwall
  10.  * patch4: length($`), length($&), length($') now optimized to avoid string copy
  11.  * patch4: new copyright notice
  12.  * patch4: many, many itty-bitty portability fixes
  13.  *
  14.  * Revision 4.0  91/03/20  01:03:09  lwall
  15.  * 4.0 baseline.
  16.  *
  17.  */
  18.  
  19. #define O_NULL 0
  20. #define O_RCAT 1
  21. #define O_ITEM 2
  22. #define O_SCALAR 3
  23. #define O_ITEM2 4
  24. #define O_ITEM3 5
  25. #define O_CONCAT 6
  26. #define O_REPEAT 7
  27. #define O_MATCH 8
  28. #define O_NMATCH 9
  29. #define O_SUBST 10
  30. #define O_NSUBST 11
  31. #define O_ASSIGN 12
  32. #define O_LOCAL 13
  33. #define O_AASSIGN 14
  34. #define O_SASSIGN 15
  35. #define O_CHOP 16
  36. #define O_DEFINED 17
  37. #define O_UNDEF 18
  38. #define O_STUDY 19
  39. #define O_POW 20
  40. #define O_MULTIPLY 21
  41. #define O_DIVIDE 22
  42. #define O_MODULO 23
  43. #define O_ADD 24
  44. #define O_SUBTRACT 25
  45. #define O_LEFT_SHIFT 26
  46. #define O_RIGHT_SHIFT 27
  47. #define O_LT 28
  48. #define O_GT 29
  49. #define O_LE 30
  50. #define O_GE 31
  51. #define O_EQ 32
  52. #define O_NE 33
  53. #define O_NCMP 34
  54. #define O_BIT_AND 35
  55. #define O_XOR 36
  56. #define O_BIT_OR 37
  57. #define O_AND 38
  58. #define O_OR 39
  59. #define O_COND_EXPR 40
  60. #define O_COMMA 41
  61. #define O_NEGATE 42
  62. #define O_NOT 43
  63. #define O_COMPLEMENT 44
  64. #define O_SELECT 45
  65. #define O_WRITE 46
  66. #define O_DBMOPEN 47
  67. #define O_DBMCLOSE 48
  68. #define O_OPEN 49
  69. #define O_TRANS 50
  70. #define O_NTRANS 51
  71. #define O_CLOSE 52
  72. #define O_EACH 53
  73. #define O_VALUES 54
  74. #define O_KEYS 55
  75. #define O_LARRAY 56
  76. #define O_ARRAY 57
  77. #define O_AELEM 58
  78. #define O_DELETE 59
  79. #define O_LHASH 60
  80. #define O_HASH 61
  81. #define O_HELEM 62
  82. #define O_LAELEM 63
  83. #define O_LHELEM 64
  84. #define O_LSLICE 65
  85. #define O_ASLICE 66
  86. #define O_HSLICE 67
  87. #define O_LASLICE 68
  88. #define O_LHSLICE 69
  89. #define O_SPLICE 70
  90. #define O_PUSH 71
  91. #define O_POP 72
  92. #define O_SHIFT 73
  93. #define O_UNPACK 74
  94. #define O_SPLIT 75
  95. #define O_LENGTH 76
  96. #define O_SPRINTF 77
  97. #define O_SUBSTR 78
  98. #define O_PACK 79
  99. #define O_GREP 80
  100. #define O_JOIN 81
  101. #define O_SLT 82
  102. #define O_SGT 83
  103. #define O_SLE 84
  104. #define O_SGE 85
  105. #define O_SEQ 86
  106. #define O_SNE 87
  107. #define O_SCMP 88
  108. #define O_SUBR 89
  109. #define O_DBSUBR 90
  110. #define O_CALLER 91
  111. #define O_SORT 92
  112. #define O_REVERSE 93
  113. #define O_WARN 94
  114. #define O_DIE 95
  115. #define O_PRTF 96
  116. #define O_PRINT 97
  117. #define O_CHDIR 98
  118. #define O_EXIT 99
  119. #define O_RESET 100
  120. #define O_LIST 101
  121. #define O_EOF 102
  122. #define O_GETC 103
  123. #define O_TELL 104
  124. #define O_RECV 105
  125. #define O_READ 106
  126. #define O_SYSREAD 107
  127. #define O_SYSWRITE 108
  128. #define O_SEND 109
  129. #define O_SEEK 110
  130. #define O_RETURN 111
  131. #define O_REDO 112
  132. #define O_NEXT 113
  133. #define O_LAST 114
  134. #define O_DUMP 115
  135. #define O_GOTO 116
  136. #define O_INDEX 117
  137. #define O_RINDEX 118
  138. #define O_TIME 119
  139. #define O_TMS 120
  140. #define O_LOCALTIME 121
  141. #define O_GMTIME 122
  142. #define O_TRUNCATE 123
  143. #define O_LSTAT 124
  144. #define O_STAT 125
  145. #define O_CRYPT 126
  146. #define O_ATAN2 127
  147. #define O_SIN 128
  148. #define O_COS 129
  149. #define O_RAND 130
  150. #define O_SRAND 131
  151. #define O_EXP 132
  152. #define O_LOG 133
  153. #define O_SQRT 134
  154. #define O_INT 135
  155. #define O_ORD 136
  156. #define O_ALARM 137
  157. #define O_SLEEP 138
  158. #define O_RANGE 139
  159. #define O_F_OR_R 140
  160. #define O_FLIP 141
  161. #define O_FLOP 142
  162. #define O_FORK 143
  163. #define O_WAIT 144
  164. #define O_WAITPID 145
  165. #define O_SYSTEM 146
  166. #define O_EXEC_OP 147
  167. #define O_HEX 148
  168. #define O_OCT 149
  169. #define O_CHOWN 150
  170. #define O_KILL 151
  171. #define O_UNLINK 152
  172. #define O_CHMOD 153
  173. #define O_UTIME 154
  174. #define O_UMASK 155
  175. #define O_MSGGET 156
  176. #define O_SHMGET 157
  177. #define O_SEMGET 158
  178. #define O_MSGCTL 159
  179. #define O_SHMCTL 160
  180. #define O_SEMCTL 161
  181. #define O_MSGSND 162
  182. #define O_MSGRCV 163
  183. #define O_SEMOP 164
  184. #define O_SHMREAD 165
  185. #define O_SHMWRITE 166
  186. #define O_RENAME 167
  187. #define O_LINK 168
  188. #define O_MKDIR 169
  189. #define O_RMDIR 170
  190. #define O_GETPPID 171
  191. #define O_GETPGRP 172
  192. #define O_SETPGRP 173
  193. #define O_GETPRIORITY 174
  194. #define O_SETPRIORITY 175
  195. #define O_CHROOT 176
  196. #define O_FCNTL 177
  197. #define O_IOCTL 178
  198. #define O_FLOCK 179
  199. #define O_UNSHIFT 180
  200. #define O_REQUIRE 181
  201. #define O_DOFILE 182
  202. #define O_EVAL 183
  203. #define O_FTRREAD 184
  204. #define O_FTRWRITE 185
  205. #define O_FTREXEC 186
  206. #define O_FTEREAD 187
  207. #define O_FTEWRITE 188
  208. #define O_FTEEXEC 189
  209. #define O_FTIS 190
  210. #define O_FTEOWNED 191
  211. #define O_FTROWNED 192
  212. #define O_FTZERO 193
  213. #define O_FTSIZE 194
  214. #define O_FTMTIME 195
  215. #define O_FTATIME 196
  216. #define O_FTCTIME 197
  217. #define O_FTSOCK 198
  218. #define O_FTCHR 199
  219. #define O_FTBLK 200
  220. #define O_FTFILE 201
  221. #define O_FTDIR 202
  222. #define O_FTPIPE 203
  223. #define O_FTLINK 204
  224. #define O_SYMLINK 205
  225. #define O_READLINK 206
  226. #define O_FTSUID 207
  227. #define O_FTSGID 208
  228. #define O_FTSVTX 209
  229. #define O_FTTTY 210
  230. #define O_FTTEXT 211
  231. #define O_FTBINARY 212
  232. #define O_SOCKET 213
  233. #define O_BIND 214
  234. #define O_CONNECT 215
  235. #define O_LISTEN 216
  236. #define O_ACCEPT 217
  237. #define O_GHBYNAME 218
  238. #define O_GHBYADDR 219
  239. #define O_GHOSTENT 220
  240. #define O_GNBYNAME 221
  241. #define O_GNBYADDR 222
  242. #define O_GNETENT 223
  243. #define O_GPBYNAME 224
  244. #define O_GPBYNUMBER 225
  245. #define O_GPROTOENT 226
  246. #define O_GSBYNAME 227
  247. #define O_GSBYPORT 228
  248. #define O_GSERVENT 229
  249. #define O_SHOSTENT 230
  250. #define O_SNETENT 231
  251. #define O_SPROTOENT 232
  252. #define O_SSERVENT 233
  253. #define O_EHOSTENT 234
  254. #define O_ENETENT 235
  255. #define O_EPROTOENT 236
  256. #define O_ESERVENT 237
  257. #define O_SOCKPAIR 238
  258. #define O_SHUTDOWN 239
  259. #define O_GSOCKOPT 240
  260. #define O_SSOCKOPT 241
  261. #define O_GETSOCKNAME 242
  262. #define O_GETPEERNAME 243
  263. #define O_SSELECT 244
  264. #define O_FILENO 245
  265. #define O_BINMODE 246
  266. #define O_VEC 247
  267. #define O_GPWNAM 248
  268. #define O_GPWUID 249
  269. #define O_GPWENT 250
  270. #define O_SPWENT 251
  271. #define O_EPWENT 252
  272. #define O_GGRNAM 253
  273. #define O_GGRGID 254
  274. #define O_GGRENT 255
  275. #define O_SGRENT 256
  276. #define O_EGRENT 257
  277. #define O_GETLOGIN 258
  278. #define O_OPEN_DIR 259
  279. #define O_READDIR 260
  280. #define O_TELLDIR 261
  281. #define O_SEEKDIR 262
  282. #define O_REWINDDIR 263
  283. #define O_CLOSEDIR 264
  284. #define O_SYSCALL 265
  285. #define O_PIPE 266
  286. #define MAXO 267
  287.  
  288. #ifndef DOINIT
  289. extern char *opname[];
  290. #else
  291. char *opname[] = {
  292.     "NULL",
  293.     "RCAT",
  294.     "ITEM",
  295.     "SCALAR",
  296.     "ITEM2",
  297.     "ITEM3",
  298.     "CONCAT",
  299.     "REPEAT",
  300.     "MATCH",
  301.     "NMATCH",
  302.     "SUBST",
  303.     "NSUBST",
  304.     "ASSIGN",
  305.     "LOCAL",
  306.     "AASSIGN",
  307.     "SASSIGN",
  308.     "CHOP",
  309.     "DEFINED",
  310.     "UNDEF",
  311.     "STUDY",
  312.     "POW",
  313.     "MULTIPLY",
  314.     "DIVIDE",
  315.     "MODULO",
  316.     "ADD",
  317.     "SUBTRACT",
  318.     "LEFT_SHIFT",
  319.     "RIGHT_SHIFT",
  320.     "LT",
  321.     "GT",
  322.     "LE",
  323.     "GE",
  324.     "EQ",
  325.     "NE",
  326.     "NCMP",
  327.     "BIT_AND",
  328.     "XOR",
  329.     "BIT_OR",
  330.     "AND",
  331.     "OR",
  332.     "COND_EXPR",
  333.     "COMMA",
  334.     "NEGATE",
  335.     "NOT",
  336.     "COMPLEMENT",
  337.     "SELECT",
  338.     "WRITE",
  339.     "DBMOPEN",
  340.     "DBMCLOSE",
  341.     "OPEN",
  342.     "TRANS",
  343.     "NTRANS",
  344.     "CLOSE",
  345.     "EACH",
  346.     "VALUES",
  347.     "KEYS",
  348.     "LARRAY",
  349.     "ARRAY",
  350.     "AELEM",
  351.     "DELETE",
  352.     "LHASH",
  353.     "HASH",
  354.     "HELEM",
  355.     "LAELEM",
  356.     "LHELEM",
  357.     "LSLICE",
  358.     "ASLICE",
  359.     "HSLICE",
  360.     "LASLICE",
  361.     "LHSLICE",
  362.     "SPLICE",
  363.     "PUSH",
  364.     "POP",
  365.     "SHIFT",
  366.     "UNPACK",
  367.     "SPLIT",
  368.     "LENGTH",
  369.     "SPRINTF",
  370.     "SUBSTR",
  371.     "PACK",
  372.     "GREP",
  373.     "JOIN",
  374.     "SLT",
  375.     "SGT",
  376.     "SLE",
  377.     "SGE",
  378.     "SEQ",
  379.     "SNE",
  380.     "SCMP",
  381.     "SUBR",
  382.     "DBSUBR",
  383.     "CALLER",
  384.     "SORT",
  385.     "REVERSE",
  386.     "WARN",
  387.     "DIE",
  388.     "PRINTF",
  389.     "PRINT",
  390.     "CHDIR",
  391.     "EXIT",
  392.     "RESET",
  393.     "LIST",
  394.     "EOF",
  395.     "GETC",
  396.     "TELL",
  397.     "RECV",
  398.     "READ",
  399.     "SYSREAD",
  400.     "SYSWRITE",
  401.     "SEND",
  402.     "SEEK",
  403.     "RETURN",
  404.     "REDO",
  405.     "NEXT",
  406.     "LAST",
  407.     "DUMP",
  408.     "GOTO",/* shudder */
  409.     "INDEX",
  410.     "RINDEX",
  411.     "TIME",
  412.     "TIMES",
  413.     "LOCALTIME",
  414.     "GMTIME",
  415.     "TRUNCATE",
  416.     "LSTAT",
  417.     "STAT",
  418.     "CRYPT",
  419.     "ATAN2",
  420.     "SIN",
  421.     "COS",
  422.     "RAND",
  423.     "SRAND",
  424.     "EXP",
  425.     "LOG",
  426.     "SQRT",
  427.     "INT",
  428.     "ORD",
  429.     "ALARM",
  430.     "SLEEP",
  431.     "RANGE",
  432.     "FLIP_OR_RANGE",
  433.     "FLIP",
  434.     "FLOP",
  435.     "FORK",
  436.     "WAIT",
  437.     "WAITPID",
  438.     "SYSTEM",
  439.     "EXEC",
  440.     "HEX",
  441.     "OCT",
  442.     "CHOWN",
  443.     "KILL",
  444.     "UNLINK",
  445.     "CHMOD",
  446.     "UTIME",
  447.     "UMASK",
  448.     "MSGGET",
  449.     "SHMGET",
  450.     "SEMGET",
  451.     "MSGCTL",
  452.     "SHMCTL",
  453.     "SEMCTL",
  454.     "MSGSND",
  455.     "MSGRCV",
  456.     "SEMOP",
  457.     "SHMREAD",
  458.     "SHMWRITE",
  459.     "RENAME",
  460.     "LINK",
  461.     "MKDIR",
  462.     "RMDIR",
  463.     "GETPPID",
  464.     "GETPGRP",
  465.     "SETPGRP",
  466.     "GETPRIORITY",
  467.     "SETPRIORITY",
  468.     "CHROOT",
  469.     "FCNTL",
  470.     "SYSIOCTL",
  471.     "FLOCK",
  472.     "UNSHIFT",
  473.     "REQUIRE",
  474.     "DOFILE",
  475.     "EVAL",
  476.     "FTRREAD",
  477.     "FTRWRITE",
  478.     "FTREXEC",
  479.     "FTEREAD",
  480.     "FTEWRITE",
  481.     "FTEEXEC",
  482.     "FTIS",
  483.     "FTEOWNED",
  484.     "FTROWNED",
  485.     "FTZERO",
  486.     "FTSIZE",
  487.     "FTMTIME",
  488.     "FTATIME",
  489.     "FTCTIME",
  490.     "FTSOCK",
  491.     "FTCHR",
  492.     "FTBLK",
  493.     "FTFILE",
  494.     "FTDIR",
  495.     "FTPIPE",
  496.     "FTLINK",
  497.     "SYMLINK",
  498.     "READLINK",
  499.     "FTSUID",
  500.     "FTSGID",
  501.     "FTSVTX",
  502.     "FTTTY",
  503.     "FTTEXT",
  504.     "FTBINARY",
  505.     "SOCKET",
  506.     "BIND",
  507.     "CONNECT",
  508.     "LISTEN",
  509.     "ACCEPT",
  510.     "GHBYNAME",
  511.     "GHBYADDR",
  512.     "GHOSTENT",
  513.     "GNBYNAME",
  514.     "GNBYADDR",
  515.     "GNETENT",
  516.     "GPBYNAME",
  517.     "GPBYNUMBER",
  518.     "GPROTOENT",
  519.     "GSBYNAME",
  520.     "GSBYPORT",
  521.     "GSERVENT",
  522.     "SHOSTENT",
  523.     "SNETENT",
  524.     "SPROTOENT",
  525.     "SSERVENT",
  526.     "EHOSTENT",
  527.     "ENETENT",
  528.     "EPROTOENT",
  529.     "ESERVENT",
  530.     "SOCKPAIR",
  531.     "SHUTDOWN",
  532.     "GSOCKOPT",
  533.     "SSOCKOPT",
  534.     "GETSOCKNAME",
  535.     "GETPEERNAME",
  536.     "SSELECT",
  537.     "FILENO",
  538.     "BINMODE",
  539.     "VEC",
  540.     "GPWNAM",
  541.     "GPWUID",
  542.     "GPWENT",
  543.     "SPWENT",
  544.     "EPWENT",
  545.     "GGRNAM",
  546.     "GGRGID",
  547.     "GGRENT",
  548.     "SGRENT",
  549.     "EGRENT",
  550.     "GETLOGIN",
  551.     "OPENDIR",
  552.     "READDIR",
  553.     "TELLDIR",
  554.     "SEEKDIR",
  555.     "REWINDDIR",
  556.     "CLOSEDIR",
  557.     "SYSCALL",
  558.     "PIPE",
  559.     "267"
  560. };
  561. #endif
  562.  
  563. #define A_NULL 0
  564. #define A_EXPR 1
  565. #define A_CMD 2
  566. #define A_STAB 3
  567. #define A_LVAL 4
  568. #define A_SINGLE 5
  569. #define A_DOUBLE 6
  570. #define A_BACKTICK 7
  571. #define A_READ 8
  572. #define A_SPAT 9
  573. #define A_LEXPR 10
  574. #define A_ARYLEN 11
  575. #define A_ARYSTAB 12
  576. #define A_LARYLEN 13
  577. #define A_GLOB 14
  578. #define A_WORD 15
  579. #define A_INDREAD 16
  580. #define A_LARYSTAB 17
  581. #define A_STAR 18
  582. #define A_LSTAR 19
  583. #define A_WANTARRAY 20
  584. #define A_LENSTAB 21
  585.  
  586. #define A_MASK 31
  587. #define A_DONT 32        /* or this into type to suppress evaluation */
  588.  
  589. #ifndef DOINIT
  590. extern char *argname[];
  591. #else
  592. char *argname[] = {
  593.     "A_NULL",
  594.     "EXPR",
  595.     "CMD",
  596.     "STAB",
  597.     "LVAL",
  598.     "SINGLE",
  599.     "DOUBLE",
  600.     "BACKTICK",
  601.     "READ",
  602.     "SPAT",
  603.     "LEXPR",
  604.     "ARYLEN",
  605.     "ARYSTAB",
  606.     "LARYLEN",
  607.     "GLOB",
  608.     "WORD",
  609.     "INDREAD",
  610.     "LARYSTAB",
  611.     "STAR",
  612.     "LSTAR",
  613.     "WANTARRAY",
  614.     "LENSTAB",
  615.     "22"
  616. };
  617. #endif
  618.  
  619. #ifndef DOINIT
  620. extern bool hoistable[];
  621. #else
  622. bool hoistable[] =
  623.   {0,    /* A_NULL */
  624.    0,    /* EXPR */
  625.    1,    /* CMD */
  626.    1,    /* STAB */
  627.    0,    /* LVAL */
  628.    1,    /* SINGLE */
  629.    0,    /* DOUBLE */
  630.    0,    /* BACKTICK */
  631.    0,    /* READ */
  632.    0,    /* SPAT */
  633.    0,    /* LEXPR */
  634.    1,    /* ARYLEN */
  635.    1,    /* ARYSTAB */
  636.    0,    /* LARYLEN */
  637.    0,    /* GLOB */
  638.    1,    /* WORD */
  639.    0,    /* INDREAD */
  640.    0,    /* LARYSTAB */
  641.    1,    /* STAR */
  642.    1,    /* LSTAR */
  643.    1,    /* WANTARRAY */
  644.    0,    /* LENSTAB */
  645.    0,    /* 21 */
  646. };
  647. #endif
  648.  
  649. union argptr {
  650.     ARG        *arg_arg;
  651.     char    *arg_cval;
  652.     STAB    *arg_stab;
  653.     SPAT    *arg_spat;
  654.     CMD        *arg_cmd;
  655.     STR        *arg_str;
  656.     HASH    *arg_hash;
  657. };
  658.  
  659. struct arg {
  660.     union argptr arg_ptr;
  661.     short    arg_len;
  662.     unsigned short arg_type;
  663.     unsigned short arg_flags;
  664. };
  665.  
  666. #define AF_ARYOK 1        /* op can handle multiple values here */
  667. #define AF_POST 2        /* post *crement this item */
  668. #define AF_PRE 4        /* pre *crement this item */
  669. #define AF_UP 8            /* increment rather than decrement */
  670. #define AF_COMMON 16        /* left and right have symbols in common */
  671. #define AF_DEPR 32        /* an older form of the construct */
  672. #define AF_LISTISH 64        /* turn into list if important */
  673. #define AF_LOCAL 128        /* list of local variables */
  674.  
  675. /*
  676.  * Most of the ARG pointers are used as pointers to arrays of ARG.  When
  677.  * so used, the 0th element is special, and represents the operator to
  678.  * use on the list of arguments following.  The arg_len in the 0th element
  679.  * gives the maximum argument number, and the arg_str is used to store
  680.  * the return value in a more-or-less static location.  Sorry it's not
  681.  * re-entrant (yet), but it sure makes it efficient.  The arg_type of the
  682.  * 0th element is an operator (O_*) rather than an argument type (A_*).
  683.  */
  684.  
  685. #define Nullarg Null(ARG*)
  686.  
  687. #ifndef DOINIT
  688. EXT unsigned short opargs[MAXO+1];
  689. #else
  690. #define A(e1,e2,e3)        (e1+(e2<<2)+(e3<<4))
  691. #define A5(e1,e2,e3,e4,e5) (e1+(e2<<2)+(e3<<4)+(e4<<6)+(e5<<8))
  692. unsigned short opargs[MAXO+1] = {
  693.     A(0,0,0),    /* NULL */
  694.     A(1,1,0),    /* RCAT */
  695.     A(1,0,0),    /* ITEM */
  696.     A(1,0,0),    /* SCALAR */
  697.     A(0,0,0),    /* ITEM2 */
  698.     A(0,0,0),    /* ITEM3 */
  699.     A(1,1,0),    /* CONCAT */
  700.     A(3,1,0),    /* REPEAT */
  701.     A(1,0,0),    /* MATCH */
  702.     A(1,0,0),    /* NMATCH */
  703.     A(1,0,0),    /* SUBST */
  704.     A(1,0,0),    /* NSUBST */
  705.     A(1,1,0),    /* ASSIGN */
  706.     A(1,0,0),    /* LOCAL */
  707.     A(3,3,0),    /* AASSIGN */
  708.     A(0,0,0),    /* SASSIGN */
  709.     A(3,0,0),    /* CHOP */
  710.     A(1,0,0),    /* DEFINED */
  711.     A(1,0,0),    /* UNDEF */
  712.     A(1,0,0),    /* STUDY */
  713.     A(1,1,0),    /* POW */
  714.     A(1,1,0),    /* MULTIPLY */
  715.     A(1,1,0),    /* DIVIDE */
  716.     A(1,1,0),    /* MODULO */
  717.     A(1,1,0),    /* ADD */
  718.     A(1,1,0),    /* SUBTRACT */
  719.     A(1,1,0),    /* LEFT_SHIFT */
  720.     A(1,1,0),    /* RIGHT_SHIFT */
  721.     A(1,1,0),    /* LT */
  722.     A(1,1,0),    /* GT */
  723.     A(1,1,0),    /* LE */
  724.     A(1,1,0),    /* GE */
  725.     A(1,1,0),    /* EQ */
  726.     A(1,1,0),    /* NE */
  727.     A(1,1,0),    /* NCMP */
  728.     A(1,1,0),    /* BIT_AND */
  729.     A(1,1,0),    /* XOR */
  730.     A(1,1,0),    /* BIT_OR */
  731.     A(1,0,0),    /* AND */
  732.     A(1,0,0),    /* OR */
  733.     A(1,0,0),    /* COND_EXPR */
  734.     A(1,1,0),    /* COMMA */
  735.     A(1,0,0),    /* NEGATE */
  736.     A(1,0,0),    /* NOT */
  737.     A(1,0,0),    /* COMPLEMENT */
  738.     A(1,0,0),    /* SELECT */
  739.     A(1,0,0),    /* WRITE */
  740.     A(1,1,1),    /* DBMOPEN */
  741.     A(1,0,0),    /* DBMCLOSE */
  742.     A(1,1,0),    /* OPEN */
  743.     A(1,0,0),    /* TRANS */
  744.     A(1,0,0),    /* NTRANS */
  745.     A(1,0,0),    /* CLOSE */
  746.     A(0,0,0),    /* EACH */
  747.     A(0,0,0),    /* VALUES */
  748.     A(0,0,0),    /* KEYS */
  749.     A(0,0,0),    /* LARRAY */
  750.     A(0,0,0),    /* ARRAY */
  751.     A(0,1,0),    /* AELEM */
  752.     A(0,1,0),    /* DELETE */
  753.     A(0,0,0),    /* LHASH */
  754.     A(0,0,0),    /* HASH */
  755.     A(0,1,0),    /* HELEM */
  756.     A(0,1,0),    /* LAELEM */
  757.     A(0,1,0),    /* LHELEM */
  758.     A(0,3,3),    /* LSLICE */
  759.     A(0,3,0),    /* ASLICE */
  760.     A(0,3,0),    /* HSLICE */
  761.     A(0,3,0),    /* LASLICE */
  762.     A(0,3,0),    /* LHSLICE */
  763.     A(0,3,1),    /* SPLICE */
  764.     A(0,3,0),    /* PUSH */
  765.     A(0,0,0),    /* POP */
  766.     A(0,0,0),    /* SHIFT */
  767.     A(1,1,0),    /* UNPACK */
  768.     A(1,0,1),    /* SPLIT */
  769.     A(1,0,0),    /* LENGTH */
  770.     A(3,0,0),    /* SPRINTF */
  771.     A(1,1,1),    /* SUBSTR */
  772.     A(1,3,0),    /* PACK */
  773.     A(0,3,0),    /* GREP */
  774.     A(1,3,0),    /* JOIN */
  775.     A(1,1,0),    /* SLT */
  776.     A(1,1,0),    /* SGT */
  777.     A(1,1,0),    /* SLE */
  778.     A(1,1,0),    /* SGE */
  779.     A(1,1,0),    /* SEQ */
  780.     A(1,1,0),    /* SNE */
  781.     A(1,1,0),    /* SCMP */
  782.     A(0,3,0),    /* SUBR */
  783.     A(0,3,0),    /* DBSUBR */
  784.     A(1,0,0),    /* CALLER */
  785.     A(1,3,0),    /* SORT */
  786.     A(0,3,0),    /* REVERSE */
  787.     A(0,3,0),    /* WARN */
  788.     A(0,3,0),    /* DIE */
  789.     A(1,3,0),    /* PRINTF */
  790.     A(1,3,0),    /* PRINT */
  791.     A(1,0,0),    /* CHDIR */
  792.     A(1,0,0),    /* EXIT */
  793.     A(1,0,0),    /* RESET */
  794.     A(3,0,0),    /* LIST */
  795.     A(1,0,0),    /* EOF */
  796.     A(1,0,0),    /* GETC */
  797.     A(1,0,0),    /* TELL */
  798.     A5(1,1,1,1,0),    /* RECV */
  799.     A(1,1,3),    /* READ */
  800.     A(1,1,3),    /* SYSREAD */
  801.     A(1,1,3),    /* SYSWRITE */
  802.     A(1,1,3),    /* SEND */
  803.     A(1,1,1),    /* SEEK */
  804.     A(0,3,0),    /* RETURN */
  805.     A(0,0,0),    /* REDO */
  806.     A(0,0,0),    /* NEXT */
  807.     A(0,0,0),    /* LAST */
  808.     A(0,0,0),    /* DUMP */
  809.     A(0,0,0),    /* GOTO */
  810.     A(1,1,1),    /* INDEX */
  811.     A(1,1,1),    /* RINDEX */
  812.     A(0,0,0),    /* TIME */
  813.     A(0,0,0),    /* TIMES */
  814.     A(1,0,0),    /* LOCALTIME */
  815.     A(1,0,0),    /* GMTIME */
  816.     A(1,1,0),    /* TRUNCATE */
  817.     A(1,0,0),    /* LSTAT */
  818.     A(1,0,0),    /* STAT */
  819.     A(1,1,0),    /* CRYPT */
  820.     A(1,1,0),    /* ATAN2 */
  821.     A(1,0,0),    /* SIN */
  822.     A(1,0,0),    /* COS */
  823.     A(1,0,0),    /* RAND */
  824.     A(1,0,0),    /* SRAND */
  825.     A(1,0,0),    /* EXP */
  826.     A(1,0,0),    /* LOG */
  827.     A(1,0,0),    /* SQRT */
  828.     A(1,0,0),    /* INT */
  829.     A(1,0,0),    /* ORD */
  830.     A(1,0,0),    /* ALARM */
  831.     A(1,0,0),    /* SLEEP */
  832.     A(1,1,0),    /* RANGE */
  833.     A(1,0,0),    /* F_OR_R */
  834.     A(1,0,0),    /* FLIP */
  835.     A(0,1,0),    /* FLOP */
  836.     A(0,0,0),    /* FORK */
  837.     A(0,0,0),    /* WAIT */
  838.     A(1,1,0),    /* WAITPID */
  839.     A(1,3,0),    /* SYSTEM */
  840.     A(1,3,0),    /* EXEC */
  841.     A(1,0,0),    /* HEX */
  842.     A(1,0,0),    /* OCT */
  843.     A(0,3,0),    /* CHOWN */
  844.     A(0,3,0),    /* KILL */
  845.     A(0,3,0),    /* UNLINK */
  846.     A(0,3,0),    /* CHMOD */
  847.     A(0,3,0),    /* UTIME */
  848.     A(1,0,0),    /* UMASK */
  849.     A(1,1,0),    /* MSGGET */
  850.     A(1,1,1),    /* SHMGET */
  851.     A(1,1,1),    /* SEMGET */
  852.     A(1,1,1),    /* MSGCTL */
  853.     A(1,1,1),    /* SHMCTL */
  854.     A5(1,1,1,1,0),    /* SEMCTL */
  855.     A(1,1,1),    /* MSGSND */
  856.     A5(1,1,1,1,1),    /* MSGRCV */
  857.     A(1,1,1),    /* SEMOP */
  858.     A5(1,1,1,1,0),    /* SHMREAD */
  859.     A5(1,1,1,1,0),    /* SHMWRITE */
  860.     A(1,1,0),    /* RENAME */
  861.     A(1,1,0),    /* LINK */
  862.     A(1,1,0),    /* MKDIR */
  863.     A(1,0,0),    /* RMDIR */
  864.     A(0,0,0),    /* GETPPID */
  865.     A(1,0,0),    /* GETPGRP */
  866.     A(1,1,0),    /* SETPGRP */
  867.     A(1,1,0),    /* GETPRIORITY */
  868.     A(1,1,1),    /* SETPRIORITY */
  869.     A(1,0,0),    /* CHROOT */
  870.     A(1,1,1),    /* FCNTL */
  871.     A(1,1,1),    /* SYSIOCTL */
  872.     A(1,1,0),    /* FLOCK */
  873.     A(0,3,0),    /* UNSHIFT */
  874.     A(1,0,0),    /* REQUIRE */
  875.     A(1,0,0),    /* DOFILE */
  876.     A(1,0,0),    /* EVAL */
  877.     A(1,0,0),    /* FTRREAD */
  878.     A(1,0,0),    /* FTRWRITE */
  879.     A(1,0,0),    /* FTREXEC */
  880.     A(1,0,0),    /* FTEREAD */
  881.     A(1,0,0),    /* FTEWRITE */
  882.     A(1,0,0),    /* FTEEXEC */
  883.     A(1,0,0),    /* FTIS */
  884.     A(1,0,0),    /* FTEOWNED */
  885.     A(1,0,0),    /* FTROWNED */
  886.     A(1,0,0),    /* FTZERO */
  887.     A(1,0,0),    /* FTSIZE */
  888.     A(1,0,0),    /* FTMTIME */
  889.     A(1,0,0),    /* FTATIME */
  890.     A(1,0,0),    /* FTCTIME */
  891.     A(1,0,0),    /* FTSOCK */
  892.     A(1,0,0),    /* FTCHR */
  893.     A(1,0,0),    /* FTBLK */
  894.     A(1,0,0),    /* FTFILE */
  895.     A(1,0,0),    /* FTDIR */
  896.     A(1,0,0),    /* FTPIPE */
  897.     A(1,0,0),    /* FTLINK */
  898.     A(1,1,0),    /* SYMLINK */
  899.     A(1,0,0),    /* READLINK */
  900.     A(1,0,0),    /* FTSUID */
  901.     A(1,0,0),    /* FTSGID */
  902.     A(1,0,0),    /* FTSVTX */
  903.     A(1,0,0),    /* FTTTY */
  904.     A(1,0,0),    /* FTTEXT */
  905.     A(1,0,0),    /* FTBINARY */
  906.     A5(1,1,1,1,0),    /* SOCKET */
  907.     A(1,1,0),    /* BIND */
  908.     A(1,1,0),    /* CONNECT */
  909.     A(1,1,0),    /* LISTEN */
  910.     A(1,1,0),    /* ACCEPT */
  911.     A(1,0,0),    /* GHBYNAME */
  912.     A(1,1,0),    /* GHBYADDR */
  913.     A(0,0,0),    /* GHOSTENT */
  914.     A(1,0,0),    /* GNBYNAME */
  915.     A(1,1,0),    /* GNBYADDR */
  916.     A(0,0,0),    /* GNETENT */
  917.     A(1,0,0),    /* GPBYNAME */
  918.     A(1,0,0),    /* GPBYNUMBER */
  919.     A(0,0,0),    /* GPROTOENT */
  920.     A(1,1,0),    /* GSBYNAME */
  921.     A(1,1,0),    /* GSBYPORT */
  922.     A(0,0,0),    /* GSERVENT */
  923.     A(1,0,0),    /* SHOSTENT */
  924.     A(1,0,0),    /* SNETENT */
  925.     A(1,0,0),    /* SPROTOENT */
  926.     A(1,0,0),    /* SSERVENT */
  927.     A(0,0,0),    /* EHOSTENT */
  928.     A(0,0,0),    /* ENETENT */
  929.     A(0,0,0),    /* EPROTOENT */
  930.     A(0,0,0),    /* ESERVENT */
  931.     A5(1,1,1,1,1),    /* SOCKPAIR */
  932.     A(1,1,0),    /* SHUTDOWN */
  933.     A(1,1,1),    /* GSOCKOPT */
  934.     A5(1,1,1,1,0),    /* SSOCKOPT */
  935.     A(1,0,0),    /* GETSOCKNAME */
  936.     A(1,0,0),    /* GETPEERNAME */
  937.     A5(1,1,1,1,0),    /* SSELECT */
  938.     A(1,0,0),    /* FILENO */
  939.     A(1,0,0),    /* BINMODE */
  940.     A(1,1,1),    /* VEC */
  941.     A(1,0,0),    /* GPWNAM */
  942.     A(1,0,0),    /* GPWUID */
  943.     A(0,0,0),    /* GPWENT */
  944.     A(0,0,0),    /* SPWENT */
  945.     A(0,0,0),    /* EPWENT */
  946.     A(1,0,0),    /* GGRNAM */
  947.     A(1,0,0),    /* GGRGID */
  948.     A(0,0,0),    /* GGRENT */
  949.     A(0,0,0),    /* SGRENT */
  950.     A(0,0,0),    /* EGRENT */
  951.     A(0,0,0),    /* GETLOGIN */
  952.     A(1,1,0),    /* OPENDIR */
  953.     A(1,0,0),    /* READDIR */
  954.     A(1,0,0),    /* TELLDIR */
  955.     A(1,1,0),    /* SEEKDIR */
  956.     A(1,0,0),    /* REWINDDIR */
  957.     A(1,0,0),    /* CLOSEDIR */
  958.     A(1,3,0),    /* SYSCALL */
  959.     A(1,1,0),    /* PIPE */
  960.     0
  961. };
  962. #undef A
  963. #undef A5
  964. #endif
  965.  
  966. int do_trans();
  967. int do_split();
  968. bool do_eof();
  969. long do_tell();
  970. bool do_seek();
  971. int do_tms();
  972. int do_time();
  973. int do_stat();
  974. STR *do_push();
  975. FILE *nextargv();
  976. STR *do_fttext();
  977. int do_slice();
  978.